package inteface;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import domain.GestorUsuario;
import domain.Usuario;

public class Login extends JInternalFrame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JPanel jpBotones;
	private JPanel jpUser;
	private JPanel jpMensaje;
	private JLabel jlMensaje;
	private JLabel jlUser;
	private JLabel jlPass;
	private static JTextField jtfUser;
	private static JPasswordField jpfPass;
	private JButton jbLogin;
	private JButton jbRegister;

	private final String ADMIN = "admin";
	private final char[] PASS_ADMIN = { 'a', 'd', 'm', 'i', 'n' };

	String blnUsuarioCorrecto;
	private static HashMap<String, Usuario> usuarios;
	private static Usuario usuarioActivo;

	public Login() {

		super("VIDEOCLUB DONOSTIA", true, // resizable
				false, // closable
				true, // maximizable
				false);// iconifiable

		setSize(300, 300);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.inicializarSubComponentes();

	}

	private void inicializarSubComponentes() {

		try {

			jbLogin = new JButton("Acceder");
			jbRegister = new JButton("Registrarse");
			jlMensaje = new JLabel(
					"Bienvenido al Videoclub Donostia!! Inicie sesion o registrese para comenzar");
			jlUser = new JLabel("User");
			jlPass = new JLabel("Password");
			jtfUser = new JTextField(20);
			jpfPass = new JPasswordField(20);

			jpMensaje = new JPanel();
			jpMensaje.setLayout(new FlowLayout());
			jpMensaje.setBorder(new EmptyBorder(20, 0, 0, 0));
			jpMensaje.add(jlMensaje);

			jpUser = new JPanel();
			jpUser.setLayout(new GridLayout(3, 2));
			jpUser.setBorder(new EmptyBorder(5, 100, 5, 100));
			jpUser.add(jlUser);
			jpUser.add(jtfUser);
			jpUser.add(jlPass);
			jpUser.add(jpfPass);

			jpBotones = new JPanel();
			jpBotones.setLayout(new FlowLayout());
			jpBotones.add(jbLogin);
			jpBotones.add(jbRegister);

			this.getContentPane().setLayout(new BorderLayout());
			this.getContentPane().add(jpMensaje, "North");
			this.getContentPane().add(jpUser, "Center");
			this.getContentPane().add(jpBotones, "South");

			this.setPreferredSize(new Dimension(450, 200));
			this.setSize(this.getPreferredSize());
			this.setVisible(true);
			// Se posiciona la ventana en el centro de la panalla

			jbLogin.addActionListener(this);
			jbRegister.addActionListener(this);

		} catch (Exception e) {
		}

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() instanceof JButton) {
			JButton btnPulsado = (JButton) e.getSource();

			if (btnPulsado == jbLogin) {

				if (jtfUser.getText().equals(ADMIN)) {
					if (Arrays.equals(jpfPass.getPassword(), PASS_ADMIN)) {
						blnUsuarioCorrecto = "admin";
					}

				} else {
					if (comprobarUsuario(jtfUser.getText(),
							String.copyValueOf(jpfPass.getPassword()))) {
						blnUsuarioCorrecto = "user";
					} else {
						blnUsuarioCorrecto = "error";
					}
				}
				this.setVisible(false);
				this.dispose();

			} else if (btnPulsado == jbRegister) {
				blnUsuarioCorrecto = "new user";
				this.setVisible(false);
				this.dispose();

			}

		}

	}

	private boolean comprobarUsuario(String username, String password) {
		boolean encontrado = false;
		GestorUsuario gestorUsuario = new GestorUsuario();
		usuarios = (HashMap<String, Usuario>) gestorUsuario.consultarUsuarios();
		if (usuarios != null) {
			ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>(
					usuarios.values());
			int i = 0;
			while (i < listaUsuarios.size() && !encontrado) {
				if (listaUsuarios.get(i).getUsername().equals(username)
						&& listaUsuarios.get(i).getPassword().equals(password)) {
					encontrado = true;
				}
				i++;
			}
		}

		return encontrado;
	}

	public static Usuario obtenerUsuario() {
		boolean encontrado = false;
		usuarioActivo = null;

		String username = jtfUser.getText();
		String password = String.copyValueOf(jpfPass.getPassword());
		GestorUsuario gestorUsuario = new GestorUsuario();
		usuarios = (HashMap<String, Usuario>) gestorUsuario.consultarUsuarios();
		ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>(
				usuarios.values());
		int i = 0;
		while (i < listaUsuarios.size() && !encontrado) {
			if (listaUsuarios.get(i).getUsername().equals(username)
					&& listaUsuarios.get(i).getPassword().equals(password)) {
				encontrado = true;
				usuarioActivo = listaUsuarios.get(i);
			}
			i++;
		}

		return usuarioActivo;
	}

	public boolean blnCargarFormulario(int xpos, int ypos) {
		boolean blnResultado = true;

		this.setLocation(xpos, ypos);

		this.setVisible(true);

		return blnResultado;
	}

	public String getUsuarioCorrecto() {
		return blnUsuarioCorrecto;
	}

}
